package br.com.rotary.manager.criar;

import br.com.rotary.modelo.Grupo;
import br.com.rotary.modelo.Usuario;
import br.com.rotary.servico.GrupoServico;
import br.com.rotary.servico.UsuarioServico;
import br.com.rotary.utilitario.Msg;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.model.DualListModel;

/**
 *
 * @author laverson
 */
@ViewScoped
@ManagedBean
public class ManagerCriarUsuario implements Serializable {

    @EJB
    UsuarioServico usuarioServico;
    @EJB
    GrupoServico grupoServico;
    private Usuario usuario;
    private String senha;
    private List<Grupo> grupos;
    private List<Grupo> grupoSelecionado;
    private Boolean login;
    private DualListModel<Grupo> dualGrupo;
    private List<Grupo> gruposSelec;

    @PostConstruct
    public void init() {
        usuario = new Usuario();
        grupos = grupoServico.pesquisarTodos();
        grupoSelecionado = new ArrayList<Grupo>();
        login = Boolean.FALSE;

        gruposSelec = new ArrayList<Grupo>();
        dualGrupo = new DualListModel<Grupo>(grupoServico.pesquisarTodos(), gruposSelec);

    }

    public void existLogin() {
        this.login = usuarioServico.existLogin(usuario.getLogin());
    }

    public void salvar() {
        try {
            if (this.usuario.getSenha().equals(this.senha)) {

                usuario.setSenha(Usuario.encryptPassword(usuario.getSenha()));
                usuario.setGrupos(dualGrupo.getTarget());

                usuarioServico.salvar(usuario);
                Msg.messagemInfo(Msg.SuccessFull);
                init();
            } else {
                Msg.messagemWarn("As senhas nao conferem !");
            }
        } catch (Exception e) {
            System.err.println(e);
        }
    }

    public boolean validaEmail(String email) {
        Pattern p = Pattern.compile("^[\\w-]+(\\.[\\w-]+)*@([\\w-]+\\.)+[a-zA-Z]{2,7}$");
        Matcher m = p.matcher(email);
        if (m.find()) {
            return true;
        } else {
            return false;
        }
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public List<Grupo> getGrupoSelecionado() {
        return grupoSelecionado;
    }

    public void setGrupoSelecionado(List<Grupo> grupoSelecionado) {
        this.grupoSelecionado = grupoSelecionado;
    }

    public List<Grupo> getGrupos() {
        return grupos;
    }

    public void setGrupos(List<Grupo> grupos) {
        this.grupos = grupos;
    }

    public Boolean getLogin() {
        return login;
    }

    public void setLogin(Boolean login) {
        this.login = login;
    }

    public DualListModel<Grupo> getDualGrupo() {
        dualGrupo = new DualListModel<Grupo>(grupoServico.pesquisarTodos(), gruposSelec);
        return dualGrupo;
    }

    public void setDualGrupo(DualListModel<Grupo> dualGrupo) {
        this.dualGrupo = dualGrupo;
    }
}
